package testes;

import static org.junit.Assert.*;


import java.util.HashSet;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.quasar.copaPaises.businessLayer.*;

public class CidadeTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@After
	public void tearDown() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@Test
	public final void testCidade() {
		Cidade c = new Cidade();
		assertNotNull(c);
	}

	@Test
	public final void testCidadeBooleanStringIntPais() {
		
		Pais p = new Pais();
		boolean capital = false;
		String nome = "Lisboa";
		int populacao = 12345;
		Cidade c = new Cidade(capital,nome,populacao,p);		
		
		assertNotNull(c);
		assertNotNull(c.capital());
		assertFalse(c.capital());
		assertSame(c.capital(),capital);
		assertNotNull(c.nome());
		assertEquals(c.nome(), "Lisboa");
		assertSame(c.nome(),nome);
		assertNotNull(c.populacao());
		assertEquals(c.populacao(), 12345);
		assertNotNull(c.pais());
		assertSame(c.pais(), p);		
	}

	@Test
	public final void testCapital() {
		Cidade c1 = new Cidade(true,null,12345,null);
		Cidade c2 = new Cidade(false,null,12345,null);
		assertTrue(c1.capital());
		assertFalse(c2.capital());
	}

	@Test
	public final void testSetCapital() {
		Cidade c1 = new Cidade();
		Cidade c2 = new Cidade();
		c1.setCapital(true);
		c2.setCapital(false);
		assertNotNull(c1.capital());
		assertNotNull(c2.capital());
		assertTrue(c1.capital());
		assertFalse(c2.capital());
	}

	@Test
	public final void testNome() {
		String nome = "Lisboa";
		Cidade c = new Cidade(false,nome,12345,null);
		assertSame(c.nome(), nome);
	}

	@Test
	public final void testSetNome() {
		String nome = "Lisboa";
		Cidade c = new Cidade();
		c.setNome(nome);
		assertSame(c.nome(), nome);
	}

	@Test
	public final void testPopulacao() {
		int populacao = 12345;
		Cidade c = new Cidade(false,null,populacao, null);
		assertEquals(c.populacao(), 12345);
	}

	@Test
	public final void testSetPopulacao() {
		
		Cidade c = new Cidade();
		c.setPopulacao(12345);
		assertEquals(c.populacao(),12345);
	}

	@Test
	public final void testPais() {
		
		Pais pais = new Pais();
		Cidade c = new Cidade(false,null,12345,pais);
		assertSame(c.pais(), pais);
	}

	@Test
	public final void testSetPais() {
		Cidade c = new Cidade();
		Pais pais = new Pais();
		c.setPais(pais);
		assertSame(c.pais(), pais);
	}

	@Test
	public final void testEstadios() {
		Cidade c = new Cidade();
		HashSet<Estadio> estadio = new HashSet<Estadio>();
		c.setEstadios(estadio);
		assertEquals(c.estadios(), estadio);
	}

	@Test
	public final void testSetEstadios() {
		Cidade c = new Cidade();
		HashSet<Estadio> estadio = new HashSet<Estadio>();
		c.setEstadios(estadio);
		assertNotNull(c.estadios());
	}

	@Test
	public final void testOrganizadora() {
		Campeonato c = new Campeonato();
		
		HashSet<Grupo> grupos = new HashSet<Grupo>();
		Grupo g = new Grupo();
		grupos.add(g);
		
		HashSet<Jogo> jogos = new HashSet<Jogo>();
		Jogo j = new Jogo();
		jogos.add(j);
		
		Estadio estadio = new Estadio();
		
		Cidade c1 = new Cidade();
		Cidade c2 = new Cidade();
		
		estadio.setCidade(c1);
		j.setEstadio(estadio);
		g.setJogos(jogos);
		c.setGrupos(grupos);
		
		assertTrue(c1.organizadora());
		assertFalse(c2.organizadora());	
	}

	@Test
	public final void testToString() {
		Cidade c = new Cidade(true, "Lisboa", 12345, new Pais());
		String toString = "Cidade [capital=true, nome=Lisboa, populacao=12345, pais=Pais [area=0, nome=null, populacao=0, continente=null, grupo=null]\n]\n";
		assertEquals(c.toString(),toString);
	}

}
